package javase基础.String类;

public class StringTable字符串常量池 {
    public static void main(String[] args) {
        //直接使用字符串常量进行赋值
        String s1 = "hello";
        String s2 = "hello";
        System.out.println(s1 == s2);//true

        //通过new创建String类对象
        //是唯一的
        String s3 = new String("hello");
        String s4 = new String("hello");
        System.out.println(s3 == s4 );//false

        /**
         * intern方法，
         * 是一个native方法，
         * 作用是手动将创建的String对象添加到常量池中
         *
         */
        char[] ch = new char[]{'a','b','c'};
        String s5 = new String(ch);//s5对象并不在常量池中
        s5.intern();//调用之后，会将s5对象的引用放入常量池中
        String s6 = "abc";//"abc"在常量池中存在了，s2创建时直接用常量池中"abc"的引用
        System.out.println(s5 == s6);


        /**
         * String类是一种不可变对象，字符串中的内容是不可改变的
         * 1.String类在设计时就是不可改变的
         * 2.所有涉及到可能修改字符串内容的操作都是创建一个新对象，改变的是新对象
         */
    }
}
